import pika
import requests
import pickle

"""
我们将消息改写成前面所描述的请求对象，这里我们借助于 requests 库中的 Request 类来表示一个请求对象
pickle.dumps(x) 的作用：把 Python 对象 x 转换为字节流（bytes），方便保存、传输、后续反序列化。
obj = pickle.loads(b) 反序列化读取
"""

MAX_PRIORITY = 100
TOTAL = 100
QUEUE_NAME = 'scrape_queue'

connection = pika.BlockingConnection(
    pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue=QUEUE_NAME, durable=True) # 已经设置持久化队列

# 循环100次，把100条详情页对象都存储在 消息队列中
# 这里我们运行下生产者，就构造了 100 个请求对象并发送到 RabbitMQ 中了
for i in range(1, TOTAL + 1):
    url = f'https://ssr1.scrape.center/detail/{i}'
    request = requests.Request('GET', url)
    channel.basic_publish(exchange='',
                          routing_key=QUEUE_NAME,
                          properties=pika.BasicProperties(
                              delivery_mode=2, # 已经设置持久化队列
                          ),
                          body=pickle.dumps(request)) # 序列化存储对象
    print(f'Put request of {url}')
